Подписаться
Опубликовано

Типы и интерфейсы. Часть 4. Дженерики

Автор
  • Имя
    Счастливый тимлид | ♥ Frontend
    Telegram

Типы и интерфейсы. Часть 4. Дженерики

Что такое дженерик? По факту — это инструмент языка TypeScript для описания структур данных, в которых тип каких-либо параметров стуктуры может задаваться из вне.

Капец, хотел написать попроще, получилось посложнее. Еще в интернете про них пишут такое:

Дженерики, или Generic Types, — обобщенные типы. Они нужны для описания похожих, но отличающихся какими-то характеристиками типов.

Дженерики, в целом, достойны отдельной статьи. Здесь же разберем особенности в рамках сравнения типов и интерфейсов.

Возьмем привычные нам AInt и AType, назовем их DInt и DType соответственно, и сделаем так, чтобы тип параметра second можно было задавать.
typescript
// Определяем интерфейс interface DInt<ExternalType> { first: boolean; second: ExternalType; }
typescript
// Определяем тип type DType<ExternalType> = { first: boolean; second: ExternalType; } Здесь мы создали переменную типа ExternalType. При создании константы с типом DInt или DType мы дол
жны указывать тип, которому будет соответствовать параметр second.
Если его не передать — будет ошибка. Если фактическое значение не будет совпадать с указанным, то тоже будет ошибка. Посмотрите:
typescript
// Будет ошибка: Generic type 'DInt<ExternalType>' requires 1 type argument(s) const dIntError: DInt = { first: true, second: 15, }
typescript
// Так правильно const dInt: DInt<number> = { first: true, second: 15, }
typescript
// Так будет ошибка: The expected type comes from property 'second' which is declared here on type 'DType<number>' const dType: DType<number> = { first: true, second: 'bla bla', }
typescript
// Так правильно const dType: DType<string> = { first: true, second: 'bla bla', }

На примерах видно, что определение и использование различается только на уровне определения ровно настолько, насколько в принципе различаются type и interface.

© Записки тимлида

Счастливый тимлид | ♥ Frontend
2204 подписчика
692 поста

Закрепленные

Из подборки #frontend

Опубликовано

Телеграмовский сосун (или какун, как правильно?)

Телеграмовский сосун суммирует мой лонгрид – стоит ли публиковать полную версию?
Опубликовано

Итоги

Итоги года блога тимлида: количество подписчиков, менторство, сообщество ИТ‑блогеров, планы на 2025
Опубликовано

Поделитесь вашими любимыми мемами уходящего года

Поделитесь любимыми мемами уходящего года

Свежие посты

Опубликовано

Телеграмовский сосун (или какун, как правильно?)

Телеграмовский сосун суммирует мой лонгрид – стоит ли публиковать полную версию?